<!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>nginx</title>
        <style>
</style>
        
        <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/Microsoft/vscode/extensions/markdown-language-features/media/markdown.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/Microsoft/vscode/extensions/markdown-language-features/media/highlight.css">
<style>
            body {
                font-family: -apple-system, BlinkMacSystemFont, 'Segoe WPC', 'Segoe UI', system-ui, 'Ubuntu', 'Droid Sans', sans-serif;
                font-size: 14px;
                line-height: 1.6;
            }
        </style>
        <style>
.task-list-item { list-style-type: none; } .task-list-item-checkbox { margin-left: -20px; vertical-align: middle; }
</style>
        
        
        
    </head>
    <body class="vscode-light">
        <ul>
<li><a href="#nginx">nginx</a>
<ul>
<li><a href="#%E4%BB%80%E4%B9%88%E6%98%AFnginx">什么是nginx</a></li>
<li><a href="#%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86"><strong>反向代理</strong></a></li>
<li><a href="#%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1"><strong>负载均衡</strong></a></li>
<li><a href="#%E5%8A%A8%E9%9D%99%E5%88%86%E7%A6%BB">动静分离</a></li>
<li><a href="#nginx%E5%AE%89%E8%A3%85%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4%E5%92%8C%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6">nginx安装、常用命令和配置文件</a>
<ul>
<li><a href="#1-%E5%9C%A8linux%E5%AE%89%E8%A3%85nginx">1. 在linux安装nginx</a>
<ul>
<li><a href="#%E6%96%B9%E6%B3%952">方法2</a></li>
</ul>
</li>
<li><a href="#2-nginx%E5%B8%B8%E7%94%A8%E7%9A%84%E5%91%BD%E4%BB%A4">2. nginx常用的命令</a></li>
<li><a href="#3-nginx%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6">3. nginx配置文件</a></li>
</ul>
</li>
<li><a href="#nginx%E7%9A%84%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86">Nginx的反向代理</a></li>
<li><a href="#%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1-1">负载均衡</a></li>
<li><a href="#nginx%E9%85%8D%E7%BD%AE%E9%AB%98%E5%8F%AF%E7%94%A8%E9%9B%86%E7%BE%A4">nginx配置高可用集群</a></li>
<li><a href="#nginx%E5%8E%9F%E7%90%86">nginx原理</a></li>
</ul>
</li>
</ul>
<h1 id="nginx">nginx</h1>
<h2 id="什么是nginx">什么是nginx</h2>
<p><strong>高性能的</strong>http和反向代理web服务器。优点：占用<strong>内存少，并发能力强</strong>。nginx可以支持热部署。</p>
<h2 id="反向代理"><strong>反向代理</strong></h2>
<p>正向代理需要配置。反向代理，请求，<strong>直接访问</strong>反向代理服务器，反向代理服务器转发请求，暴露反向代理服务器。</p>
<p><img src="" alt="image-20201119133345000"></p>
<h2 id="负载均衡"><strong>负载均衡</strong></h2>
<p>分摊操作到多个操作单元中执行。并发量大的情况，增加服务器数量，发送请求时经过代理服务器分发到服务器上。</p>
<h2 id="动静分离">动静分离</h2>
<p>将静态资源和动态资源分离在不同的服务器上。</p>
<h2 id="nginx安装常用命令和配置文件">nginx安装、常用命令和配置文件</h2>
<h3 id="1-在linux安装nginx">1. 在linux安装nginx</h3>
<p>查看官方文档,需要依赖</p>
<p>可以下载对应的依赖压缩包:</p>
<p>安装GCC基础包，<code>yum install -y gcc gcc-c++</code></p>
<p>安装make基础包，<code>yum install -y make</code></p>
<p>安装pcre 基础包， <code>yum install -y pcre pcre-devel</code></p>
<p>或者下载pcre.tar.gz: <a href="ftp://ftp.pcre.org/pub/pcre/,%E4%BD%BF%E7%94%A8./configure%E9%85%8D%E7%BD%AE,%E4%BD%BF%E7%94%A8make">ftp://ftp.pcre.org/pub/pcre/,使用./configure配置,使用make</a> &amp;&amp; make install, 使用pcre-config --version查看</p>
<p>安装zlib基础包， <code>yum install -y zlib zlib-devel</code></p>
<p>或者下载tar.gz:<a href="http://zlib.net/">http://zlib.net/</a></p>
<p>安装openssl基础包， <code>yum install -y openssl opensll-devel</code></p>
<p>或者下载tar.gz:<a href="https://www.openssl.org/source/">https://www.openssl.org/source/</a></p>
<p>nginx.tar.gz的安装:执行./configure然后make &amp;&amp; make install,安装完成后出现**/usr/local**/nginx,进入sbin中./nginx启动</p>
<pre><code class="language-bash"><div><span class="hljs-comment"># 以centos为例,使用yum安装对应的依赖</span>
[root@localhost]<span class="hljs-comment"># yum -y install gcc gcc-c++ autoconf automake libtool make cmake</span>
[root@localhost]<span class="hljs-comment"># yum -y install zlib zlib-devel openssl openssl-devel pcre-devel</span>
[root@4802fcff0721 nginx-1.19.4]<span class="hljs-comment"># ./configure</span>
[root@4802fcff0721 nginx-1.19.4]<span class="hljs-comment"># make &amp;&amp; make install</span>
</div></code></pre>
<p>配置config/nginx.conf文件</p>
<blockquote>
<p>查看对应的端口</p>
</blockquote>
<pre><code class="language-bash"><div>firewall-cmd --list-all
</div></code></pre>
<blockquote>
<p>设置开放端口号,nginx默认监听80端口,开放80端口</p>
</blockquote>
<pre><code class="language-bash"><div>firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-port=端口号/tcp --permanent
</div></code></pre>
<blockquote>
<p>重启防火墙</p>
</blockquote>
<pre><code class="language-bash"><div>firewall-cmd --reload
</div></code></pre>
<h4 id="方法2">方法2</h4>
<p>使用docker安装, docker pull nginx</p>
<p>后台运行nginx容器</p>
<h3 id="2-nginx常用的命令">2. nginx常用的命令</h3>
<p>自己配置环境变量</p>
<p>nginx -v: 查看版本</p>
<p>nginx:启动nginx</p>
<p>nginx -s reload ：<strong>修改配置后重新加载生效</strong></p>
<p>nginx -s reopen ：重新打开日志文件</p>
<p>nginx -t -c /xxxx/nginx.conf:测试nginx配置文件是否正确</p>
<p>nginx -s stop : 快速停止nginx</p>
<p>nginx -s quit ：完整有序的停止nginx</p>
<h3 id="3-nginx配置文件">3. nginx配置文件</h3>
<p>路径nginx下的conf</p>
<blockquote>
<p>全局块</p>
</blockquote>
<p>影响整体配置的指令</p>
<pre><code class="language-bash"><div><span class="hljs-comment">#user  nobody;</span>
worker_processes  1; <span class="hljs-comment"># 支持的并发处理量</span>

<span class="hljs-comment"># 日志的位置及级别</span>
<span class="hljs-comment">#error_log  logs/error.log;</span>
<span class="hljs-comment">#error_log  logs/error.log  notice;</span>
<span class="hljs-comment">#error_log  logs/error.log  info;</span>

<span class="hljs-comment">#pid        logs/nginx.pid;</span>
</div></code></pre>
<blockquote>
<p>events块</p>
</blockquote>
<p>影响Nginx服务器与用户的网络连接</p>
<pre><code class="language-bash"><div>events {
    worker_connections  1024; <span class="hljs-comment"># 支持的连接数 1024</span>
}
</div></code></pre>
<blockquote>
<p><strong>http块</strong></p>
</blockquote>
<p>分为http全局块, <strong>server部分</strong>. 主要看server部分.</p>
<h2 id="nginx的反向代理">Nginx的反向代理</h2>
<p>在http&gt;server&gt;location /{</p>
<p>​	添加proxy_pass <a href="http://ip">http://ip</a>:端口</p>
<p>}</p>
<p>可以写多个server块</p>
<p>` 代表包含</p>
<p>server {</p>
<p>location `  /edu/ { # 包含/edu/</p>
<p>}</p>
<p>location `  /vod/ { # 包含/vod/</p>
<p>}</p>
<p>}</p>
<p>location指令:</p>
<p>= 字符串严格判断</p>
<p>` 字符串含有指定的,区分大小写</p>
<p>`*字符串含指定的字符串, 不区分大写</p>
<p>^`</p>
<h2 id="负载均衡-1">负载均衡</h2>
<p>平均分担请求</p>
<p>http块中加入upstream 名 {</p>
<p>​	server ip:端口;</p>
<p>​	server ip:端口;</p>
<p>}</p>
<p>在server块中添加:</p>
<p>location /{</p>
<p>​	添加proxy_pass <a href="http://xn--fhq79li47a1phtpw5ki">http://上面配置的名</a></p>
<p>}</p>
<p>分配策略:</p>
<p>轮询:每个请求按时间的顺序访问不同服务器,依次访问,宕机跳过</p>
<p>weight: 默认为1,可以通过配置 upstream时在server后添加weight=权值</p>
<p>例如: server 192.168.4.1 weight=10</p>
<p>ip_hash:</p>
<p>每个请求按访问请求的ip的hash结果分配,</p>
<p>fair(第三方的): 根据服务器响应时间分配请求,写法</p>
<p>upstream 下加一个fair:upstream&gt;fair</p>
<h2 id="nginx配置高可用集群">nginx配置高可用集群</h2>
<h2 id="nginx原理">nginx原理</h2>

    </body>
    </html>